﻿using System;
using System.Collections.Generic;

namespace ListAddMethod
{
    public class Program
    {
        public static void Main()
        {
            // Create a list of parts.
            List<Part> parts = new List<Part>();

            // Add parts to the list.
            parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
            parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
            parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
            parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
            parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
            parts.Add(new Part() { PartName = "shift lever", PartId = 1634 });

            // Write out the parts in the list. This will call the overridden ToString method
            // in the Part class.
            Console.WriteLine();
            foreach (Part aPart in parts)
            {
                Console.WriteLine(aPart);
            }

            // Check the list for part #1734. This calls the IEquatable.Equals method
            // of the Part class, which checks the PartId for equality.
            Console.WriteLine("\nContains(\"1734\"): {0}",
            parts.Contains(new Part { PartId = 1734, PartName = "" }));

            // Insert a new item at position 2.
            Console.WriteLine("\nInsert(2, \"1834\")");
            parts.Insert(2, new Part() { PartName = "brake lever", PartId = 1834 });

            //Console.WriteLine();
            foreach (Part aPart in parts)
            {
                Console.WriteLine(aPart);
            }

            Console.WriteLine("\nParts[3]: {0}", parts[3]);

            Console.WriteLine("\nRemove(\"1534\")");

            // This will remove part 1534 even though the PartName is different,
            // because the Equals method only checks PartId for equality.
            parts.Remove(new Part() { PartId = 1534, PartName = "cogs" });

            Console.WriteLine();
            foreach (Part aPart in parts)
            {
                Console.WriteLine(aPart);
            }
            Console.WriteLine("\nRemoveAt(3)");
            // This will remove the part at index 3.
            parts.RemoveAt(3);

            Console.WriteLine();
            foreach (Part aPart in parts)
            {
                Console.WriteLine(aPart);
            }

            /*

                ID: 1234   Name: crank arm
                ID: 1334   Name: chain ring
                ID: 1434   Name: regular seat
                ID: 1444   Name: banana seat
                ID: 1534   Name: cassette
                ID: 1634   Name: shift lever

                Contains("1734"): False

                Insert(2, "1834")
                ID: 1234   Name: crank arm
                ID: 1334   Name: chain ring
                ID: 1834   Name: brake lever
                ID: 1434   Name: regular seat
                ID: 1444   Name: banana seat
                ID: 1534   Name: cassette
                ID: 1634   Name: shift lever

                Parts[3]: ID: 1434   Name: regular seat

                Remove("1534")

                ID: 1234   Name: crank arm
                ID: 1334   Name: chain ring
                ID: 1834   Name: brake lever
                ID: 1434   Name: regular seat
                ID: 1444   Name: banana seat
                ID: 1634   Name: shift lever

                RemoveAt(3)

                ID: 1234   Name: crank arm
                ID: 1334   Name: chain ring
                ID: 1834   Name: brake lever
                ID: 1444   Name: banana seat
                ID: 1634   Name: shift lever


            */
        }
    }
}
